package com.pro.service.imple;

import com.pro.mapper.LoginMapper;
import com.pro.pojo.JsMenu;
import com.pro.pojo.JsUser;
import com.pro.pojo.JsonData;
import com.pro.pojo.LoginRecord;
import com.pro.service.LoginService;
import com.pro.utils.ContextHolderUtils;
import com.pro.utils.DateUtils;
import com.pro.utils.IPAndAddressUtils;
import com.pro.utils.RedisCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpSession;
import java.util.*;

/**
 * @author ：刘弘禹
 * @description：TODO
 * @date ： 2022/1/9
 */
@Service
public class LoginServiceImple implements LoginService {
    @Autowired
    private LoginMapper loginMapper;

    @Autowired
    private RedisCache redisCache;


    //登录
    @Override
    public JsUser login(String account, String password) {
        HttpSession session = ContextHolderUtils.getSession();
        JsUser login = loginMapper.login(account, password);
        redisCache.setCacheObject("user:"+login.getAccount(),login);
        if(session.getAttribute("user") == null){
            Map<String, Object> map = IPAndAddressUtils.getIPAndAddressUtils();
            LoginRecord loginRecord = new LoginRecord(null,login.getUserId(),map.get("ip").toString(),
                    map.get("addr").toString(),2, DateUtils.transDate(new Date()),2);
            addLoginRecord(loginRecord);
        }
        if(login != null){
            session.setAttribute("user",login);
        }
        if(redisCache.getCacheObject("deptId:"+login.getDeptId()) == null){
            List<JsMenu> jsMenus = queryJsMenu(login.getDeptId());
            redisCache.setCacheObject("deptId:"+login.getDeptId(),jsMenus);
        }
        return login;
    }

    //获取导航栏
    @Override
    public List<JsMenu> queryJsMenu(Integer deptId) {
        List<JsMenu> jsMenus = loginMapper.queryJsMenu(deptId);
        for (JsMenu jsMenu : jsMenus) {
            if(jsMenu.getParentId() == 0){
                jsMenu.setChildren(getMenu(jsMenus,jsMenu.getMenuId()));
                List<JsMenu> navDatumData = jsMenu.getChildren();
                for (JsMenu navDatumDatum : navDatumData) {
                    navDatumDatum.setChildren(getMenu(jsMenus,navDatumDatum.getMenuId()));
                }
            }
        }

        ListIterator<JsMenu> jsMenuListIterator = jsMenus.listIterator();
        while (jsMenuListIterator.hasNext()) {
            boolean b = jsMenuListIterator.hasNext();
            if(b){
                if(jsMenuListIterator.next().getParentId() != 0){
                    jsMenuListIterator.remove();
                }
            }
        }
        return jsMenus;
    }

    //添加登录日志
    @Override
    public Boolean addLoginRecord(LoginRecord loginRecord) {
        Boolean flag = loginMapper.addLoginRecord(loginRecord);
        return flag;
    }

    private List<JsMenu> getMenu(List<JsMenu> menus,Integer menuId){
        List<JsMenu> cMenus = new ArrayList<>();
        for (JsMenu menu : menus) {
            if(menu.getParentId() == menuId){
                cMenus.add(menu);
            }
        }
        return cMenus;
    }
}
